package com.lmaye.eshop.inventory.controller;


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.lmaye.eshop.inventory.entity.User;
import com.lmaye.eshop.inventory.service.UserService;
import org.springframework.web.bind.annotation.*;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author lmay.Zhou
 * @since 2019-03-06
 */
@RestController
@RequestMapping("/user")
public class UserController {
    /**
     * User Service
     */
    private UserService userService;

    public UserController(UserService userService) {
        this.userService = userService;
    }

    /**
     * 查询用户信息
     * - 数据库
     * ---------------------------------------------
     * - 内置方法没有加载mapper xml文件，所以没有缓存
     * - mybatis-plus封装的CRUD使用二级缓存时 mybatis-plus版本必须要低于2.0.9, 否则不生效,只有在mapper.xml中有的SQL方法才生效.
     *
     * @param name  用户名
     * @return  User
     */
    @ResponseBody
    @GetMapping("/find/{name}")
    public User findUser(@PathVariable String name) {
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("name", name);
        return userService.getOne(queryWrapper);
    }

    /**
     * 查询用户信息
     * - 数据库
     * ---------------------------------------------
     * - 自定义的SQL会读/写ehcache缓存中的数据
     * - mybatis-plus封装的CRUD使用二级缓存时 mybatis-plus版本必须要低于2.0.9, 否则不生效,只有在mapper.xml中有的SQL方法才生效.
     *
     * @param name  用户名
     * @return  User
     */
    @ResponseBody
    @GetMapping("/customize/find/{name}")
    public User findUserByName(@PathVariable String name) {
        return userService.getByName(name);
    }

    /**
     * 获取用户信息
     * - redis缓存
     *
     * @return User
     */
    @ResponseBody
    @GetMapping("/get/cached")
    public User gerCachedUser() {
        return userService.getCachedUserInfo();
    }
}
